import tkinter as tk
from tkinter import PhotoImage
import threading
import logging

from tkinter import ttk #表格
from utils.read_config import read_config
from parsers.cron_job import scheduled_tasks,scheduler_remove,scheduler_dropAll

#更新行中列的数据
def update_row(tree,item_id,num,text):
    values = tree.item(item_id, "values")
    new_values=list(values)
    new_values[num]=text
    tree.item(item_id, values=tuple(new_values))

def interfaces():
    # 创建主窗口
    root = tk.Tk()
    root.title("调度任务")#标题
    # photo = PhotoImage(file="icon/图标.png")  # 左上角改了，任务栏没变
    # root.iconphoto(False, photo)

    # 500宽度  300高度   距屏幕左侧100像素 顶部200像素
    # root.geometry('500x300+100+200')
    # 得到屏幕宽度
    sw = root.winfo_screenwidth()
    # 得到屏幕高度
    sh = root.winfo_screenheight()
    # 窗口大小
    ww = 800
    wh = 500
    #窗口居中
    x = (sw - ww) / 2
    y = (sh - wh) / 2
    root.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
    root.resizable(width=False, height=False)

    # 创建一个 Frame 使用 pack 布局
    # side：指定组件的排列方向，可选值为 top（默认）、bottom、left、right。
    # fill：指定组件是否填充额外空间，可选值为 none（默认）、x、y、both。
    # expand：指定组件是否随窗口大小变化而扩展。
    # padx 和 pady：设置组件的水平和垂直外边距

    # #有问题
    # frame3 = tk.Frame(root, bg="lightgray")
    # frame3.pack(padx=15, pady=10)

    # button = tk.Button(frame3, text="全部停止", command=scheduler_dropAll)
    # button.pack(side="left")

    frame1 = tk.Frame(root, bg="lightgray")
    frame1.pack(fill="both", expand=True, padx=15, pady=10)

    

    # 创建表格
    columns = ("序号","名称", "定时","文件路径","方法名","状态","操作")
    tree = ttk.Treeview(frame1, columns=columns, show="headings",height=5)
    # 滚动条
    # 创建垂直滚动条
    scrollbar_y = ttk.Scrollbar(frame1, orient="vertical", command=tree.yview)
    scrollbar_y.pack(side="right", fill="y")  # 将滚动条放在右侧，填充垂直方向
    # 创建水平滚动条
    scrollbar_x = ttk.Scrollbar(frame1, orient="horizontal", command=tree.xview)
    scrollbar_x.pack(side="bottom", fill="x")  # 将滚动条放在底部，填充水平方向
    # 将 Treeview 的滚动事件与滚动条关联
    tree.configure(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
    # 布局
    tree.pack(side="left",fill="both", expand=True)

    # 设置表格标题
    for col in columns:
        tree.heading(col, text=col,anchor='center')
        tree.column(col, width=100, minwidth=50, anchor='center')

    # 添加数据
    cron_list=read_config("cron","job")
    if cron_list==None:
        tree.insert("", "end", values=("没有找到任务"))
    else:
        for index,job in enumerate(cron_list):
            tree.insert("", "end", text=f"{index+1}",values=(index+1,job["name"], job["cron"],job["file_name"], job["method_name"],"","点击"), tags=("button",))
    # 绑定点击事件
    def on_button_click(event):
        # 获取点击的行
        item_id = tree.identify_row(event.y)
        if item_id :
            column_id = tree.identify_column(event.x)
            if column_id == "#7":
                values = tree.item(item_id, "values")
                event = threading.Event()
                if values[5]:
                    # 更新行数据
                    update_row(tree,item_id,5,"")
                    scheduler_remove(values[4])
                else:
                    update_row(tree,item_id,5,"运行中")
                    scheduled_tasks(values[4])
                    
    # 绑定鼠标左键点击事件到操作列
    tree.tag_bind("button", "<Double-Button-1>", on_button_click)

    
    # frame2 = tk.Frame(root, bg="lightgray")
    # frame2.pack(fill="both", expand=True, padx=15, pady=10)
    # # 创建控件
    # entry = tk.Entry(frame2)
    # entry.pack()

    # button = tk.Button(frame2, text="Click Me", command=on_button_click)
    # button.pack()

    # label = tk.Label(frame2, text="Enter your name")
    # label.pack()
    # # label.grid(row=0, column=1, sticky="nsew", padx=10, pady=10)


    # 运行主循环
    root.mainloop()

def tasks1():
    print("程序运行interface:tasks1")
